unit UFrmVendas;
                                   
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, DBCtrls, Mask, Db, wwdbdatetimepicker, Grids,
  Wwdbigrd, Wwdbgrid, Buttons, ToolEdit, RXDBCtrl, RxLookup, RXCtrls, jpeg;

type
  TFrmVendas = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Label2: TLabel;
    DBText1: TDBText;
    Panel3: TPanel;
    Label1: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    DBText2: TDBText;
    DBText3: TDBText;
    Edit2: TEdit;
    RxLookupEdit1: TRxLookupEdit;
    Panel4: TPanel;
    StringGrid1: TStringGrid;
    GroupBox1: TGroupBox;
    Edit3: TEdit;
    GroupBox2: TGroupBox;
    Edit4: TEdit;
    Label4: TLabel;
    GroupBox3: TGroupBox;
    Edit5: TEdit;
    Label5: TLabel;
    Label6: TLabel;
    Button1: TButton;
    Button2: TButton;
    Label3: TLabel;
    DBDateEdit1: TDBDateEdit;
    Panel5: TPanel;
    Label9: TLabel;
    RxLabel1: TRxLabel;
    Bevel1: TBevel;
    Label10: TLabel;
    Bevel2: TBevel;
    Label11: TLabel;
    RxLabel2: TRxLabel;
    Edit6: TEdit;
    BitBtn1: TBitBtn;
    Timer1: TTimer;
    Timer2: TTimer;
    RadioGroup1: TRadioGroup;
    Edit1: TEdit;
    SpeedButton2: TSpeedButton;
    Image1: TImage;
    wwDBGrid1: TwwDBGrid;
    RadioGroup2: TRadioGroup;
    BitBtn2: TBitBtn;
    procedure FormActivate(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure wwDBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure SpeedButton1Click(Sender: TObject);
    procedure DBLookupComboBox1Exit(Sender: TObject);
    procedure DBDateEdit1KeyPress(Sender: TObject; var Key: Char);
    procedure Button2Click(Sender: TObject);
    procedure RxLookupEdit1Exit(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure RxLookupEdit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit6KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit4Exit(Sender: TObject);
    procedure Edit4KeyPress(Sender: TObject; var Key: Char);
    procedure SpeedButton2Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure RadioGroup2Click(Sender: TObject);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure BitBtn2Click(Sender: TObject);
  private
     a , b : integer;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmVendas: TFrmVendas;
  x : integer;
  pago : boolean;
  tipo : string;
implementation

uses Modulo;

{$R *.DFM}

procedure TFrmVendas.FormActivate(Sender: TObject);
begin
   StringGrid1.Cells[0,0] := 'Produtos';
   StringGrid1.Cells[1,0] := 'Quantidade';
   StringGrid1.Cells[2,0] := 'Preço';
   StringGrid1.Cells[3,0] := 'Total';
   StringGrid1.Cells[4,0] := 'Pagar';
end;

procedure TFrmVendas.RadioGroup1Click(Sender: TObject);
begin
   if RadioGroup1.ItemIndex = 1 then
   begin
      Button2.enabled := true;
      Edit1.visible := true;
      Edit1.SetFocus;
      tipo := 'Cliente'
   end
   else
   begin
      RadioGroup2.ItemIndex := 0;
      Button2.Enabled := false;
      Edit1.visible := false;
      DBDateEdit1.SetFocus;
      tipo := 'Avulsa'
   end;
end;

procedure TFrmVendas.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var
    vBusca : String;
begin
  Case key of
    VK_Return:
    Begin
       if (Edit1.text = '') then
       begin
          ShowMessage('Digite um nome para pesquisar!');
          Edit1.SetFocus;
          exit;
       end;
       if (Edit1.text <> '') then
       begin
          vBusca:='';
          DMEscola.Qconsultacli.Close;
          DMEscola.Qconsultacli.SQL.Clear;
          DMEscola.Qconsultacli.Sql.Add ('Select * From Clientes');
          DMEscola.Qconsultacli.Sql.Add('WHERE ');
          DMEscola.Qconsultacli.Sql.Add('(Nome like :pNOME) or');
          DMEscola.Qconsultacli.Sql.Add('(NickName like :pNICK)');
          DMEscola.Qconsultacli.ParamByName('pNOME').AsString:='%'+Edit1.text+'%';
          DMEscola.Qconsultacli.ParamByName('pNICK').AsString:='%'+Edit1.text+'%';
          DMEscola.Qconsultacli.open;
          vBusca:=DMEscola.QconsultacliNome.Value;
          If vBusca <> '' then
          begin
             wwDBGrid1.visible:=True;
             wwDBGrid1.setfocus;
          end
          else
          begin
             ShowMessage('Cliente não encontrado efetue a pesquisa novamente '+#13+'ou clique para Venda Avulsa');
             Edit1.Text := '';
             Edit1.SetFocus;
          end;
       end;
    end;
  end;
end;

procedure TFrmVendas.wwDBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   Case Key of
      VK_Return:
      begin
         wwDBGrid1.visible := false;
         Panel2.visible := true;
         DBDateEdit1.SetFocus;
      end;
      VK_Escape:
      begin
         wwDBGrid1.Visible := false;
         Edit1.SetFocus;
      end;
   end;
end;

procedure TFrmVendas.SpeedButton1Click(Sender: TObject);
var
   total : real;
begin
   x := StringGrid1.RowCount;
   DMEscola.Qprodutos.close;
   DMEscola.Qprodutos.SQL.Clear;
   DMEscola.Qprodutos.SQL.Add('Select * From Produtos');
   DMEscola.Qprodutos.SQL.Add('Where descricao = :prod');
   DMEScola.Qprodutos.ParamByName('prod').AsString := RxLookupEdit1.LookupValue;
   DMEscola.Qprodutos.open;
   DMEscola.Qprodutos.Edit;
   DMEscola.QprodutosEstoque_Atual.Value := DMEscola.QprodutosEstoque_Atual.Value - StrToFloat(Edit2.Text);
   DMEscola.Qprodutos.Post;
   //=======
   DMEscola.Qdetalhesven.Edit;
   DMEscola.Qdetalhesven.Append;
   DMEscola.QdetalhesvenCod_Cli.  Value := DBText3.Field.AsInteger;
   DMEscola.QdetalhesvenProduto.Value := RxLookupEdit1.Text;
   DMEScola.QdetalhesvenQuatidade.Value := StrToInt(Edit2.Text);
   DMescola.QdetalhesvenPreco_unit.Value := DBText2.Field.AsFloat;
   DMEscola.QdetalhesvenPreco_total.Value := DMEScola.QdetalhesvenQuatidade.Value * DMescola.QdetalhesvenPreco_unit.Value;
   DMEscola.Qdetalhesvenpago.Value := pago;
   DMEscola.Qdetalhesven.Post;
   StringGrid1.Cells[0,x] := RxLookupEdit1.Text;
   StringGrid1.Cells[1,x] := Edit2.Text;
   StringGrid1.Cells[2,x] := FloatToStr(DBText2.Field.AsFloat);
   StringGrid1.Cells[3,x] := FloatToStr(StrToFloat(Edit2.Text) * (DBText2.Field.AsFloat));
   if pago = true then
      StringGrid1.Cells[4,x] := 'SIM'
   else
      StringGrid1.Cells[4,x] := 'NÃO';
   total := DMEScola.QdetalhesvenQuatidade.Value * DMescola.QdetalhesvenPreco_unit.Value;
   Edit3.Text :=  FloatToStr(StrToFloat(Edit3.text) + total);
   Edit5.Text := FloatToStr(StrToFloat(Edit3.Text) - ((StrToFloat(Edit3.Text) * StrToFloat(Edit4.Text)) / 100));
   StringGrid1.RowCount := StringGrid1.RowCount + 1;
   RXLookupEdit1.Text := '';
   RXLookupEdit1.SetFocus;
   Edit2.Text := '';
   DBText2.Visible := false;
   DMEscola.Qprodutos.close;
   DMEscola.Qprodutos.SQL.Clear;
   DMEscola.Qprodutos.SQL.Add('Select * From Produtos');
   DMEscola.Qprodutos.open;
end;

procedure TFrmVendas.DBLookupComboBox1Exit(Sender: TObject);
begin
   DBText2.Visible := true;
end;

procedure TFrmVendas.DBDateEdit1KeyPress(Sender: TObject; var Key: Char);
begin
   if Key = #13 then
   begin
      Key := #0;
      PostMessage(Handle, WM_NEXTDLGCTL, 0, 0)
   end;
end;

procedure TFrmVendas.Button2Click(Sender: TObject);
begin
   DMEscola.Qvenda.Edit;
   DMEscola.Qvenda.Append;
   DMEscola.QvendaTipo_venda.value := tipo;
   if tipo = 'Avulsa' then
      DMEscola.QvendaCliente.Value := tipo
   else
      DMEscola.QvendaCliente.Value := DBText1.Field.AsString;
   DMEscola.QvendaTotal.Value := StrToFloat(Edit3.Text);
   DMEscola.QvendaDesconto.Value := StrToFloat(Edit4.Text);
   DMEscola.QvendaTota_final.Value := StrToFloat(Edit5.Text);
   DMEscola.QvendaPago.Value := false;
   ShowMessage('Compra no valor de R$ ' + FloatToStr(DMescola.QvendaTota_final.value) + ' marcado para o cliente '+DBText1.Field.AsString);
   DMEscola.Qvenda.Post;
   DBText2.visible := false;
   Panel2.Visible := false;
   RXLookupEdit1.Text := '';
   Edit2.Text := '';
   Edit3.Text := '0';
   Edit4.Text := '0';
   Edit5.Text := '0';
   StringGrid1.RowCount := 2;
   StringGrid1.Cells[0,1] := '';
   StringGrid1.Cells[1,1] := '';
   StringGrid1.Cells[2,1] := '';
   StringGrid1.Cells[3,1] := '';
   RadioGroup1.ItemIndex := 1;
   Edit1.Text := '';
   Edit1.SetFocus;
end;

procedure TFrmVendas.RxLookupEdit1Exit(Sender: TObject);
begin
   DBText2.Visible := true;
end;

procedure TFrmVendas.Button1Click(Sender: TObject);
begin
   timer1.enabled := true;
   RxLabel1.Caption := Edit5.Text;
end;

procedure TFrmVendas.BitBtn1Click(Sender: TObject);
begin
   timer2.enabled := true;
   DMEscola.Qvenda.Edit;
   DMEscola.Qvenda.Append;
   DMEscola.QvendaTipo_venda.value := tipo;
   if tipo = 'Avulsa' then
      DMEscola.QvendaCliente.Value := 'Avulsa'
   else
      DMEscola.QvendaCliente.Value := DBText1.Field.AsString;
   DMEscola.QvendaTotal.Value := StrToFloat(Edit3.Text);
   DMEscola.QvendaDesconto.Value := StrToFloat(Edit4.Text);
   DMEscola.QvendaTota_final.Value := StrToFloat(Edit5.Text);
   DMEscola.QvendaPago.Value := true;
   DMEscola.Qvenda.Post;
   Panel2.Visible := false;
   DBText2.visible := false;
   RXLookupEdit1.Text := '';
   Edit2.Text := '';
   Edit3.Text := '0';
   Edit4.Text := '0';
   Edit5.Text := '0';
   StringGrid1.RowCount := 2;
   StringGrid1.Cells[0,1] := '';
   StringGrid1.Cells[1,1] := '';
   StringGrid1.Cells[2,1] := '';
   StringGrid1.Cells[3,1] := '';
   RadioGroup1.ItemIndex := 1;
   Edit1.Text := '';
   Edit1.SetFocus;
end;

procedure TFrmVendas.Timer1Timer(Sender: TObject);
begin
   Panel5.visible := true;
   Edit6.SEtfocus;
   a := Panel5.Height + 10;
   b := Panel5.Width + 14;
   Panel5.Height := a;
   Panel5.Width := b;
   if (b > 140) then
      timer1.enabled := false;
end;

procedure TFrmVendas.Timer2Timer(Sender: TObject);
begin
   a := Panel5.Height - 10;
   b := Panel5.Width - 14;
   Panel5.Height := a;
   Panel5.Width := b;
   if (b <= 1) then
      timer2.enabled := false;
end;

procedure TFrmVendas.RxLookupEdit1KeyPress(Sender: TObject; var Key: Char);
begin
   if Key = #13 then
   begin
      Key := #0;
      PostMessage(Handle, WM_NEXTDLGCTL, 0, 0)
   end;
end;

procedure TFrmVendas.Edit6KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if Key = VK_Return then
   begin
      RxLabel2.caption := FloatToStr(StrToFloat(Edit6.Text) - StrToFloat(RxLabel1.caption));
      BitBtn1.SetFocus
   end;
end;

procedure TFrmVendas.Edit4Exit(Sender: TObject);
begin
   Edit5.Text := FloatToStr(StrToFloat(Edit3.Text) - ((StrToFloat(Edit3.Text) * StrToFloat(Edit4.Text)) / 100));
end;

procedure TFrmVendas.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
   if Key = #13 then
   begin
      Key := #0;
      PostMessage(Handle, WM_NEXTDLGCTL, 0, 0)
   end;
end;

procedure TFrmVendas.SpeedButton2Click(Sender: TObject);
begin
   close;
end;

procedure TFrmVendas.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if Key = VK_F2 then
      Button1.Click;
   if Key = VK_F3 then
      Button2.Click;
   if Key = VK_F12 then
      close;
end;

procedure TFrmVendas.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Action := CaFree;
end;

procedure TFrmVendas.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
   if MessageDlg('Tem certeza que deseja sair da Tela de Vendas?', MTConfirmation, [mbyes, mbno], 0) = mrno then
      CanClose := false;
end;

procedure TFrmVendas.RadioGroup2Click(Sender: TObject);
begin
   if tipo = 'Avulsa' then
      RadioGroup2.ItemIndex := 0;
   if RadioGroup2.ItemIndex = 0 then
      pago := true
   else
      pago := false;
end;

procedure TFrmVendas.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
   begin
      Key := #0;
      PostMessage(Handle, WM_NEXTDLGCTL, 0, 0)
   end;
end;

procedure TFrmVendas.BitBtn2Click(Sender: TObject);
var
   total : real;
begin
   x := StringGrid1.RowCount;
   DMEscola.Qprodutos.close;
   DMEscola.Qprodutos.SQL.Clear;
   DMEscola.Qprodutos.SQL.Add('Select * From Produtos');
   DMEscola.Qprodutos.SQL.Add('Where descricao = :prod');
   DMEScola.Qprodutos.ParamByName('prod').AsString := RxLookupEdit1.LookupValue;
   DMEscola.Qprodutos.open;
   DMEscola.Qprodutos.Edit;
   if (DMEscola.QprodutosServico.Value = true) then
   begin
      DMEscola.QprodutosEstoque_Atual.Value := DMEscola.QprodutosEstoque_Atual.Value - StrToFloat(Edit2.Text);
      DMEscola.Qprodutos.Post
   end;
   //=======
   DMEscola.Qdetalhesven.Edit;
   DMEscola.Qdetalhesven.Append;
   if RadioGroup1.ItemIndex = 1 then
      DMEscola.QdetalhesvenCod_Cli.Value := DBText3.Field.AsInteger
   else
      DMEscola.QdetalhesvenCod_Cli.Value := 0;
   DMEscola.QdetalhesvenProduto.Value := RxLookupEdit1.Text;
   DMEScola.QdetalhesvenQuatidade.Value := StrToInt(Edit2.Text);
   DMescola.QdetalhesvenPreco_unit.Value := DBText2.Field.AsFloat;
   DMEscola.QdetalhesvenPreco_total.Value := DMEScola.QdetalhesvenQuatidade.Value * DMescola.QdetalhesvenPreco_unit.Value;
   DMEscola.Qdetalhesvenpago.Value := pago;
   DMEscola.Qdetalhesven.Post;
   StringGrid1.Cells[0,x] := RxLookupEdit1.Text;
   StringGrid1.Cells[1,x] := Edit2.Text;
   StringGrid1.Cells[2,x] := FloatToStr(DBText2.Field.AsFloat);
   StringGrid1.Cells[3,x] := FloatToStr(StrToFloat(Edit2.Text) * (DBText2.Field.AsFloat));
   if pago = true then
      StringGrid1.Cells[4,x] := 'SIM'
   else
      StringGrid1.Cells[4,x] := 'NÃO';
   total := DMEScola.QdetalhesvenQuatidade.Value * DMescola.QdetalhesvenPreco_unit.Value;
   Edit3.Text :=  FloatToStr(StrToFloat(Edit3.text) + total);
   Edit5.Text := FloatToStr(StrToFloat(Edit3.Text) - ((StrToFloat(Edit3.Text) * StrToFloat(Edit4.Text)) / 100));
   StringGrid1.RowCount := StringGrid1.RowCount + 1;
   RXLookupEdit1.Text := '';
   RXLookupEdit1.SetFocus;
   Edit2.Text := '';
   DBText2.Visible := false;
   DMEscola.Qprodutos.close;
   DMEscola.Qprodutos.SQL.Clear;
   DMEscola.Qprodutos.SQL.Add('Select * From Produtos');
   DMEscola.Qprodutos.open;
end;

end.
